//package com.smartdot.bluetoothidcarddemo.http.interceptor;
//
//import android.app.Activity;
//import android.content.DialogInterface;
//import android.content.Intent;
//import android.support.v7.app.AlertDialog;
//import android.text.TextUtils;
//
//import com.solemountain.application.BuildConfig;
//import com.solemountain.application.http.RetrofitUtils;
//import com.solemountain.application.mvp.model.response.TokenModel;
//import com.solemountain.application.mvp.view.activity.main.HomeActivity;
//import com.solemountain.application.utils.ActivityStackManager;
//import com.solemountain.application.utils.CodeUtils;
//import com.solemountain.application.utils.LogUtils;
//import com.solemountain.application.utils.LoginUtil;
//import java.io.IOException;
//
//import okhttp3.Interceptor;
//import okhttp3.Request;
//import okhttp3.Response;
//import retrofit2.Call;
//
///**
// * Token刷新
// * Created by LUOLI on 2018/2/11.
// */
//
//public class TokenInterceptor implements Interceptor {
//    private static final String TAG = "TokenInterceptor";
//
//    @Override
//    public Response intercept(Chain chain) throws IOException {
//        synchronized (this) {
//            Request request = chain.request();
//            Response response = chain.proceed(request);
//            if (isTokenExpired(response)) {//根据和服务端的约定判断token过期
//                //同步请求方式，获取最新的Token
//                String newSession = getNewToken();
//                if (!TextUtils.isEmpty(newSession)) {
//                    //使用新的Token，创建新的请求
//                    Request newRequest = chain.request()
//                            .newBuilder()
//                            .header("token", newSession)
//                            .build();
//                    //重新请求
//                    return chain.proceed(newRequest);
//                } else {
//                    // 刷新token失败，则重新登录 获取栈顶的Activity
//                    final Activity activity = ActivityStackManager.getInstance().currentActivity();
//                    activity.runOnUiThread(new Runnable() {
//                        @Override
//                        public void run() {
//                            AlertDialog.Builder builder = new AlertDialog.Builder(activity);
//                            builder.setCancelable(false);
//                            builder.setMessage("登录过期，请您重新登录");
//                            builder.setTitle("提示");
//                            builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
//                                @Override
//                                public void onClick(DialogInterface dialog, int which) {
//                                    activity.startActivity(new Intent(activity, HomeActivity.class));
//                                    CodeUtils.starActivityDown(activity);
//                                }
//                            });
//                            builder.show();
//                        }
//                    });
////                    return response;
//                }
//            }
//            return response;
//        }
//    }
//
//    /**
//     * 根据Response，判断Token是否失效
//     *
//     * @param response
//     * @return
//     */
//    private boolean isTokenExpired(Response response) {
//        if (response.code() == 401) {
//            return true;
//        }
//        return false;
//    }
//
//    /**
//     * 同步请求方式，获取最新的Token
//     *
//     * @return
//     */
//    private String getNewToken() throws IOException {
//        // 通过一个特定的接口获取新的token，此处要用到同步的retrofit请求
//        String refreshToken = LoginUtil.getRefreshToken();
//        String url = BuildConfig.SERVER_ADD + "token/refresh";
//        Call<TokenModel> call = RetrofitUtils.newInstence().refreshToken(url, refreshToken);
//        TokenModel body = call.execute().body();
//        if (body.status == 20000) {
//            LogUtils.eNormal(TAG, "同步请求刷新成功token:" + body.status);
//            LoginUtil.putToken(body.token);
//            return body.token;
//        } else {
//            LogUtils.eNormal(TAG, "同步请求刷新失败token:" + body.status);
//            return "";
//        }
//    }
//
//
//}
